<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="UXMCi" id="UXMCi"><span data-lake-id="uebe99427" id="uebe99427">典型回答</span></h1>
  <p data-lake-id="u56358647" id="u56358647"><br></p>
  <p data-lake-id="u51078cde" id="u51078cde" style="text-align: justify"><span data-lake-id="udf731f84" id="udf731f84" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">所谓单元，是指一个能完成所有业务操作的自包含集合，在这个集合中包含了所有业务所需的所有服务，以及分配给这个单元的数据。</span></p>
  <p data-lake-id="u08037ec1" id="u08037ec1" style="text-align: justify"><span data-lake-id="uc8ccf739" id="uc8ccf739" class="lake-fontsize-12" style="color: rgb(102, 102, 102)">​</span><br></p>
  <p data-lake-id="u5ad50589" id="u5ad50589" style="text-align: justify"><span data-lake-id="uc7e1cf80" id="uc7e1cf80" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">单元化架构就是把单元作为系统部署的基本单位，在全站所有机房中部署数个单元，每个机房里的单元数目不定，任意一个单元都部署了系统所需的所有的应用，数据则是全量数据按照某种维度划分后的一部分。</span></p>
  <p data-lake-id="ube83f6ba" id="ube83f6ba" style="text-align: justify"><span data-lake-id="uc9de627c" id="uc9de627c" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">​</span><br></p>
  <p data-lake-id="uef64bdf3" id="uef64bdf3" style="text-align: justify"><span data-lake-id="ua7b3343f" id="ua7b3343f" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">所以，在单元化架构中，分成很多个单元和一个中心。每个单元之间都是相互独立的。一个单元中完整的部署了一整套业务，如电商交易，金融支付，一次用户操作可以在一个单元内部完成，不需要跨单元执行。</span></p>
  <p data-lake-id="u7e3fc22f" id="u7e3fc22f" style="text-align: justify"><span data-lake-id="ua8f56871" id="ua8f56871" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">​</span><br></p>
  <p data-lake-id="uc74966f2" id="uc74966f2" style="text-align: justify"><span data-lake-id="uae209f68" id="uae209f68" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">但是如果从数据角度来说， 单元内的数据又不是完整的，他只包含这个单元内的数据，其他的单元的数据他是没有的。</span></p>
  <p data-lake-id="ud5656ce7" id="ud5656ce7" style="text-align: justify"><span data-lake-id="u06098b45" id="u06098b45" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">​</span><br></p>
  <p data-lake-id="u38aad1e9" id="u38aad1e9" style="text-align: justify"><span data-lake-id="u07d095f4" id="u07d095f4" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">所以，多个单元组合在一起，数据才是完整的。比如我们可以把一个淘宝， 分成3个单元，如上海单元、北京单元和新加坡单元。</span></p>
  <p data-lake-id="u951efac1" id="u951efac1" style="text-align: justify"><span data-lake-id="uc761b838" id="uc761b838" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">​</span><br></p>
  <p data-lake-id="u353880ac" id="u353880ac" style="text-align: justify"><span data-lake-id="u4661d04e" id="u4661d04e" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">这样，一个杭州的用户下单，就可以直接路由到上海单元，并且在这个单元内把所有流程都走完，一个美国的用户下单，就会路由到新加坡单元，并在这个单元完成所有操作。并且杭州的用户的数据只在上海单元中有，美国用户的数据只保存在新加坡单元中。</span></p>
  <p data-lake-id="u8c8dcab6" id="u8c8dcab6" style="text-align: justify"><span data-lake-id="u3045dbf5" id="u3045dbf5" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">​</span><br></p>
  <p data-lake-id="u98650f08" id="u98650f08" style="text-align: justify"><span data-lake-id="ue85f6227" id="ue85f6227" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">除了单元以外， 一般还有一个中心的概念，中心的数据就是全量的，所有单元的数据的聚合在一起，都存放在中心上，也会有一部分用户可以路由到中心进行业务操作。</span></p>
  <p data-lake-id="u69cc51ea" id="u69cc51ea" style="text-align: justify"><span data-lake-id="uc4d296c1" id="uc4d296c1" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">​</span><br></p>
  <p data-lake-id="u151dbd65" id="u151dbd65" style="text-align: justify"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1689496568468-c5290ee2-5e9c-4fe7-a36a-470b535491d4.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_33%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="u3db841b5" id="u3db841b5" style="text-align: justify"><br></p>
  <p data-lake-id="u56e622bb" id="u56e622bb" style="text-align: justify"><span data-lake-id="ua1023626" id="ua1023626">做了单元化以后，一次下单要经过的交易系统、支付系统、数据库、缓存、MQ等等，这些都是在本单元内部独立部署的，所有的请求都不需要跨单元，在单元内部封闭执行完成，可以大大的</span><strong><span data-lake-id="uad7363cb" id="uad7363cb">降低网络的延迟</span></strong><span data-lake-id="ud440e237" id="ud440e237">。</span></p>
  <p data-lake-id="u80c7ff0e" id="u80c7ff0e" style="text-align: justify"><span data-lake-id="u3104692e" id="u3104692e">​</span><br></p>
  <p data-lake-id="u8745f5e6" id="u8745f5e6" style="text-align: justify"><span data-lake-id="ua585fcc0" id="ua585fcc0">并且，做了单元化以后非常方便的扩容，可以在单元内部快速扩容，不会影响到其他单元，也可以直接增加一个新的单元。都有非常好的</span><strong><span data-lake-id="u2295f5c9" id="u2295f5c9">扩展性</span></strong><span data-lake-id="u0f49345f" id="u0f49345f">。</span></p>
  <p data-lake-id="u2a913ad2" id="u2a913ad2" style="text-align: justify"><span data-lake-id="ufdbbf296" id="ufdbbf296" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">​</span><br></p>
  <p data-lake-id="u72c0581f" id="u72c0581f" style="text-align: justify"><span data-lake-id="ub854e2cd" id="ub854e2cd" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">做了多单元之后，就可以天然实现异地多活，具有很好的</span><strong><span data-lake-id="u89add065" id="u89add065" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">容灾性</span></strong><span data-lake-id="u61fd54ff" id="u61fd54ff" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">。在用户访问的时候，就可以就近原则，可以得到更</span><strong><span data-lake-id="u1134354d" id="u1134354d" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">快地响应</span></strong><span data-lake-id="u8ca41f8a" id="u8ca41f8a" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">。</span></p>
  <p data-lake-id="uf22a9b84" id="uf22a9b84" style="text-align: justify"><span data-lake-id="u6c7c9cc4" id="u6c7c9cc4" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">​</span><br></p>
  <p data-lake-id="u5a8ea0dd" id="u5a8ea0dd" style="text-align: justify"><span data-lake-id="uf14c7c98" id="uf14c7c98" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">当然，单元化也存在一些问题和限制：</span></p>
  <p data-lake-id="u62731061" id="u62731061" style="text-align: justify"><span data-lake-id="u26742686" id="u26742686" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">​</span><br></p>
  <p data-lake-id="u8f587cbe" id="u8f587cbe" style="text-align: justify"><span data-lake-id="u46cd19a2" id="u46cd19a2" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">1、单元化需要全链路改造，在整个环节中，如有一个环节没有做单元化改造，这种情况这个节点就只有中心。那么网络交互就一定会跨单元，跨单元就会带来更多的网络延迟。并且从这个节点开始，后面的所有请求也都只能在中心完成了。</span></p>
  <p data-lake-id="ua77d37d4" id="ua77d37d4" style="text-align: justify"><span data-lake-id="u94d543c8" id="u94d543c8" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">​</span><br></p>
  <p data-lake-id="ue60b3f74" id="ue60b3f74" style="text-align: justify"><span data-lake-id="u35d37cfb" id="u35d37cfb" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">2、每个单元都不是完整数据，这就会使得如果用户的路由没做好，就会导致用户的数据跨单元访问后获取不到数据。如果做得好，一个用户只会固定访问一个单元，那么就可能要打破就近原则，比如一个杭州的用户出差美国之后，还会路由到上海单元，那就会访问非常慢。如果给他路由到新加坡单元，速度是快了，但是数据可能没有。</span></p>
  <p data-lake-id="uc67139cd" id="uc67139cd" style="text-align: justify"><span data-lake-id="ub088de27" id="ub088de27" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">​</span><br></p>
  <p data-lake-id="u9bb6afc6" id="u9bb6afc6" style="text-align: justify"><span data-lake-id="u42f63adf" id="u42f63adf" class="lake-fontsize-12" style="color: rgb(62, 62, 62)">3、成本，这个架构方案，成本巨高。所以只在一些大厂中才会采用，并且即使是这些大厂，也没有所有应用都做了单元化改造。并且会衍生出类似强单元化、弱单元化、非单元化等链路，会让这个系统更加的复杂。</span></p>
 </body>
</html>